<?php

require_once APPLICATION_PATH.'/controllers/PedidoCart.php';
require_once APPLICATION_PATH.'/controllers/PedidoItem.php';

class PedidoController extends Zend_Controller_Action
{

    protected $_sessionNamespace = null;

    private $_cliente = null;

    private $_articuloSelected = null;

    protected $_pedidoCart = null;

	protected $_usuarioLogueado = null;
	
	public function init ()
    {
    	
    	if(!Zend_Auth::getInstance()->hasIdentity())  
        {  
            $this->_redirect('/Index/');  
        }
        $this->_usuarioLogueado = Zend_Auth::getInstance()->getIdentity(); 
         
        /* Initialize action controller here */
    	$this->view->title = "PEDIDO";
    	$this->_pedidoCart = new PedidoCart();
    	
    	//Carga el usuario que esta en sesion
    	if (isset($this->getSessionNs()->clienteSelected))
		{
		      $this->_cliente = $this->getSessionNs()->clienteSelected;
		      $this->view->cliente = $this->_cliente;		      
		}
        if (isset($this->getSessionNs()->articuloSelected))
		{
		      $this->_articuloSelected = $this->getSessionNs()->articuloSelected;
		      $this->view->articuloSelected = $this->_articuloSelected;
		}
		
		//Calcula los totales
		$this->calcularTotales();		
    }

    public function indexAction()
    {
        try {
        	
        	$tablaArticulos = new Application_Model_DbTable_Articulo();
        	$this->view->articulos = $tablaArticulos->listarTodos(); 
        	$this->view->nuevos = $tablaArticulos->articulosNuevos();
        	$this->view->promociones = $tablaArticulos->articulosPromociones();
        	$this->view->auditoria = $tablaArticulos->articulosAuditoria();
        	
        } catch (Exception $e) {
        }
    	
    	
        
        
        
        
        
    }

    public function seleccionarproductoAction()
    {
    	$idArticulo = $this->getRequest()->getParam('idArticulo', - 1);
    	$this->noRenderizarVista();
    	$tablaArticulos = new Application_Model_DbTable_Articulo();
    	$this->_articuloSelected = $tablaArticulos->get($idArticulo);
    	$this->persist();
    	echo 'ok';
    }

    public function noRenderizarVista()
    {
        //esta accion no usara layout.phtml
        $this->_helper->layout->disableLayout();
        //esta accion no renderizara su contenido
        $this->_helper->viewRenderer->setNoRender();
    }

    public function getSessionNs()
    {
    	//Zend_Session::start();
        if (null === $this->_sessionNamespace) {
            $this->setSessionNs(new Zend_Session_Namespace('CLIENTE'));
        }
        return $this->_sessionNamespace;
    }

    public function setSessionNs(Zend_Session_Namespace $ns)
    {
		$this->_sessionNamespace = $ns;
    }

    public function persist()
    {
		$this->getSessionNs()->articuloSelected = $this->_articuloSelected;
    }

    public function additemAction()
    {
        $idArticulo = $this->_articuloSelected['id'];
    	$pedido = $this->getRequest()->getParam('cantPedido', 0);
    	$cambio = $this->getRequest()->getParam('cantCambio', 0);
    	$inventario = $this->getRequest()->getParam('cantInventario', 0);
    	$precioArticulo = $this->_articuloSelected['precio'];
    	
        $this->noRenderizarVista();
        //Si ya existe suma las cantidades
        $tempArticulo = $this->_pedidoCart->offsetGet($idArticulo);
        if (null === $tempArticulo) {
        	$this->_pedidoCart->addItem($idArticulo, $pedido, $cambio, $inventario, $precioArticulo);        	
        }
        elseif ( $tempArticulo instanceof PedidoItem){
        	$this->_pedidoCart->addItem($idArticulo,
        	 $pedido + $tempArticulo->getCantidadPedido(), 
        	 $cambio + $tempArticulo->getCantidadCambio(), 
        	 $inventario+ $tempArticulo->getCantidadInventario(),
        	 $precioArticulo);
        }
        
        $this->calcularTotales();
        unset($this->getSessionNs()->articuloSelected);
        
        echo 'ok';
    }

    public function calcularTotales()
    {
    	$this->_pedidoCart->CalcularTotales();
    	$this->view->totalPedido = $this->_pedidoCart->getTotalPedido();
    	$this->view->totalCambio = $this->_pedidoCart->getTotalCambio();
    	$this->view->totalInventario = $this->_pedidoCart->getTotalInventario();
    }

    public function consultaritemsAction()
    {
    	$pedidos = $this->_pedidoCart->getPedidoItems();
    	$array_Articulos = array();
    	$tablaArticulo = new Application_Model_DbTable_Articulo();
    	foreach ($pedidos as $item) {
    		
    		$objArticulo = $tablaArticulo->get($item->getIdArticulo());
    		
    		$data = array(
	    		'id'=>$item->getIdArticulo(),
	    		'descripcion'=>$objArticulo['descripcion'],
	    		'cantPedido'=>$item->getCantidadPedido(),
	    		'cantCambio'=>$item->getCantidadCambio(),
	    		'cantInventario'=>$item->getCantidadInventario()    		
    		);
    		$array_Articulos[] = $data;
    	}
    	$this->view->itemsPedido = $array_Articulos;
    }

    public function removeitemAction()
    {
        $this->noRenderizarVista();
    	$idsArticulos = $this->getRequest()->getParam('idsArticulos', null);
        if (!(null === $idsArticulos)) {
        	$array = preg_split("/,/", $idsArticulos,null,PREG_SPLIT_NO_EMPTY);
        	if(count($array) > 0){
        		foreach ($array as $idArticulo) {
        			$this->_pedidoCart->removeItem(intval($idArticulo));
        		}
        	}
        	//$this->consultaritemsAction();
        }
        
        echo 'ok';
    }

    public function modificaritemAction()
    {
        $idArticulo = $this->getRequest()->getParam('idArticulo', null);
        $guardar = $this->getRequest()->getParam('guardar', false);
        
        if (!(null === $idArticulo)) {
        	if ($guardar) {  
        		$this->noRenderizarVista();
        		$pedido = $this->getRequest()->getParam('pedido', 0);
        		$cambio = $this->getRequest()->getParam('cambio', 0);
        		$inventario = $this->getRequest()->getParam('inventario', 0);
        		
        		if($this->_pedidoCart->offsetExists(intval($idArticulo))){
        			$item = $this->_pedidoCart->offsetGet(intval($idArticulo));
        			$item->setCantidadPedido($pedido);
        			$item->setCantidadCambio($cambio);
        			$item->setCantidadInventario($inventario);
        			$this->_pedidoCart->offsetSet(intval($idArticulo), $item);
        		}
        		      		
        		echo 'ok';
	        }
	        else {
	        	$tablaArticulos = new Application_Model_DbTable_Articulo();
	    		$infoArticulo = $tablaArticulos->get($idArticulo);
	        	
	    		//Guarda los datos de pedido, cambio e inventario
	    		$item = $this->_pedidoCart->offsetGet(intval($idArticulo));
	    		$data = array(
	    			'codigo'=> $item->getIdArticulo(),
	    			'descripcion'=> $infoArticulo['descripcion'],
	    			'precio'=> $infoArticulo['precio'],
		    		'pedido'=> $item->getCantidadPedido(), 
		    		'cambio'=> $item->getCantidadCambio(), 
		    		'invent'=> $item->getCantidadInventario()
	    		);
	    		$this->view->articuloAModificar = $data; 
	        }
        }
        
        
    }

    public function guardarpedidoAction()
    {
        $this->noRenderizarVista();
        $pedidos = $this->_pedidoCart->getPedidoItems();
        
        $latitud = $this->getRequest()->getParam('latitud', null);
        $longitud = $this->getRequest()->getParam('longitud', null);
        $precision = $this->getRequest()->getParam('precision', null);
        
        
        if(count($pedidos) > 0 && isset($this->_cliente)){
        	
        	try {
        		
	        	$idCliente = $this->_cliente['id']; 
	        	       	
	        	$data = array('cliente_id' => $idCliente,
	        	'idusuario' => $this->_usuarioLogueado->id,
	        	'latitud' => $latitud,
	        	'longitud' => $longitud,
	        	'precision' => $precision);
	        	
	        	
	            $tablaPedidos = new Application_Model_DbTable_Pedido();
	            $tablaDetallePedidos = new Application_Model_DbTable_Detallepedido();
	            
	            //Si esta en modo edicion        	
		        if (isset($this->getSessionNs()->infoPedidoAEditar))
				{
					//Trae la info de sesion
					$idPedido = $this->getSessionNs()->infoPedidoAEditar;
					
				    //Elimina el detalle del pedido
				    $where = $tablaDetallePedidos->getAdapter()->quoteInto('pedido_id=?',$idPedido);
				    
				    $tablaDetallePedidos->delete($where);
				    //por ultimo lo borra de la sesion
					unset($this->getSessionNs()->infoPedidoAEditar);		      
				}
				else{
					$idPedido = $tablaPedidos->insert($data);
				}
	            
		        foreach ($pedidos as $item) {
		    		$data = array(
			    		'pedido_id'=>$idPedido,
			    		'articulo_id'=>$item->getIdArticulo(),
			    		'cantidad'=>$item->getCantidadPedido(),
			    		'cambio'=>$item->getCantidadCambio(),
			    		'inventario'=>$item->getCantidadInventario()    		
		    		);
		    		$tablaDetallePedidos->insert($data);
		    	}
		    	
		    	$tablaRutas = new Application_Model_DbTable_Ruta();
		    	$dia = $this->getDiaSeleccionado();		    	
		    	$tablaRutas->actualizarInfoRuta($dia, $idCliente, $this->_usuarioLogueado->id);
		    	
		    	Zend_Session::namespaceUnset('CLIENTE');
		    	echo 'EXITO';
        	} catch (Exception $e) {
        		echo 'FALLO: '.$e->getMessage();
        	}
        	
        }else {
        	echo 'SIN_DATOS';
        }
    }
    
	public function getDiaSeleccionado() {
		$ns = new Zend_Session_Namespace();
		if(isset($ns->diaSeleccionado)){
		  return  $ns->diaSeleccionado;
		}else{
		  return -1;
		}
	}

    public function consultarpedidosanterioresAction()
    {
    	$tablaPedidos = new Application_Model_DbTable_Pedido();    	
        $this->view->ultimoPedidos = $tablaPedidos->ultimosPedidoCliente($this->_cliente['id']);
    }

    public function copiarpedidoAction()
    {
        $idPedido = $this->getRequest()->getParam('IdPedido');
        $accion = $this->getRequest()->getParam('ACCION');
        
        //Si existe pedido en sesion los elimina
    	if (isset($this->getSessionNs()->pedidoItems))
		{
		    unset($this->getSessionNs()->pedidoItems);		      
		}
		//Si existe info de pedido a editar lo elimina
        if (isset($this->getSessionNs()->infoPedidoAEditar))
		{
		    unset($this->getSessionNs()->infoPedidoAEditar);		      
		}        
		
        $tablaPedido = new Application_Model_DbTable_Pedido();
        
        
        if($accion === "COPIAR" || $accion === "EDITAR"){        	
        	$dataCopia = $tablaPedido->informacionPedido($idPedido);
        	
        	foreach ($dataCopia as $pedido){
        		$this->_pedidoCart->addItem(
        		$pedido['articulo_id'],
        		$pedido['cantidad'],
        		$pedido['cambio'],   
        		$pedido['inventario'],
        		$pedido['precio']);
        	}
        	$this->calcularTotales(); 

        	if ($accion === "EDITAR") {
        		$this->getSessionNs()->infoPedidoAEditar = $pedido['id'];
        		
        	}
        	
        	$this->_redirect('/Pedido/');
        	
        }else if ($accion === "ELIMINAR") {
        	
        	$tablaDetallePedidos = new Application_Model_DbTable_Detallepedido();
        	$where = $tablaDetallePedidos->getAdapter()->quoteInto('pedido_id=?',$idPedido);
			$tablaDetallePedidos->delete($where);
			
			$where = $tablaPedido->getAdapter()->quoteInto('id=?',$idPedido);
			$tablaPedido->delete($where);
			        	
        	$this->_redirect('/clientes/infocliente/idCliente/'.$this->_cliente['id']);
        }

        
        return;
			
    }


}

















